from goods.models import GoodsChannel


def get_categories():
    """返回商品类别数据"""
    # 查询商品频道和分配
    categories = {}  # 包装所有商品分类数据

    # 获得所有一级商品数据
    goods_channels_qs = GoodsChannel.objects.order_by('group_id', 'sequence')

    for channel in goods_channels_qs:

        # 获得组号
        group_id = channel.group_id

        # 判断组号是否在字典里
        if group_id not in categories:
            # 不存在,包装一个当前组的准备数据
            categories[group_id] = {
                'channels': [],
                'sub_cats': []
            }

        # 获取1级类别数据
        cat1 = channel.category
        # 将频道中的url绑定给一级类型对象
        cat1.url = channel.url
        # 获取1级id的数据提取key的值添加到字典中
        categories[group_id]['channels'].append(cat1)

        # 获得当前一组下的所有2级数据
        cat2_qs = cat1.subs.all()
        # 遍历2级数据的查寻集
        for cat2 in cat2_qs:
            # 获得2级下的所有3级数据, 得到3级查寻集
            cat3_qs = cat2.subs.all()
            # 把二级下面的所有三级绑定给cat2对象的sub_cats属性
            cat2.sub_cats = cat3_qs
            # 把二级下的所有数据添加到1级的id
            categories[group_id]['sub_cats'].append(cat2)

    return categories

